// import { getAccessToken } from '..'
// import { logout } from '../business/logout'
import config from '../../config/index'
import { fetchApi, fetchAccessApi } from './request-gasc'
// import {userInfo} from '../../../mock/post/getMenuList'

/**
 * 获取用户信息
 * @param vueInstance
 * @param options {Object}
 * @returns {Promise<never>|Promise<unknown>|Promise<AxiosResponse<any>>}
 */
function fetchUserInfo(vueInstance, options = {}) {
  // 如果需要accessToken，但获取不到本地的记录
  // if (!getAccessToken() && !options.noAccessToken) {
  //   logout()
  //   return Promise.reject(new Error('check LS auth key null'))
  // }

  /**
   * 判断主store中是否存在用户信息
   */
  if (
    vueInstance &&
    vueInstance.$store &&
    vueInstance.$store.state &&
    vueInstance.$store.state.global &&
    vueInstance.$store.state.global.user.isLogin
  ) {
    // 返回一个promise对象
    return Promise.resolve(vueInstance.$store.state.global.user.info)
  } else {
    // 如果传入对应的request函数，则使用程序内部的request实例
    const request = options.fetchApi || fetchApi
    // 当主store不存在用户信息，则需要从接口去获取当前用户信息，返回一个promise对象给业务侧进行填充store操作

    // TODO for test 模拟用户
    if(!options.apiUrl && !options.url) {
      return fetchAccessApi({
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded'
        },
        method: 'post',
        url: `/whoami`
      })

      // return new Promise(resolve => {
      //   resolve(userInfo.data)
      // })

    }

    return request({
      baseURL: options.apiBaseUrl || options.baseURL || config.baseURL,
      url: options.apiUrl || options.url,
      method: options.method || 'get'
    }).then(res => {
      return Promise.resolve(res)
    })
  }
}

export { fetchUserInfo }
